using System;
using System.Collections.Generic;
using HeadCounter.Armourer.Base;
using MathematicallySafe.HeadCounter.Data.Common;
using MathematicallySafe.HeadCounter.Data.Models;

namespace MathematicallySafe.HeadCounter.Data.Interfaces
{
    public interface IGuild: IPersistable
    {
        string Name { get; set; }
        int NumberOfRaiders { get; }
        IEnumerable<Raider> Raiders { get; }
        IEnumerable<Raider> ActiveRaiders { get; }
        IEnumerable<Raider> RaidersByMain { get; }
        IEnumerable<Raider> ActiveRaidersByMain { get; }
        double ShortPeriodLootCountMean { get; set; }
        double ShortPeriodLootValueMean { get; set; }
        double ShortPeriodLootRateMean { get; set; }
        double ShortPeriodWeightedLootRateMean { get; set; }
        double? ShortPeriodLootPriorityMean { get; set; }
        double LongPeriodLootCountMean { get; set; }
        double LongPeriodLootValueMean { get; set; }
        double LongPeriodLootRateMean { get; set; }
        double LongPeriodWeightedLootRateMean { get; set; }
        double? LongPeriodLootPriorityMean { get; set; }
        double LifetimeLootCountMean { get; set; }
        double LifetimeLootValueMean { get; set; }
        double LifetimeLootRateMean { get; set; }
        double LifetimeWeightedLootRateMean { get; set; }
        double? LifetimeLootPriorityMean { get; set; }
        double LootRateStdDev { get; set; }
        double LootRateLow { get; }
        double LootRateHigh { get; }
        double WeightedLootRateStdDev { get; set; }
        double WeightedLootRateLow { get; }
        double WeightedLootRateHigh { get; }
        void AddRaider(string characterName, CharacterClass characterClass, CharacterRace characterRace, DateTime joined);
        void RemoveRaider(string characterName);
        event EventHandler<RosterChangedEventArgs> RaiderAdded;
        event EventHandler<RosterChangedEventArgs> RaiderRemoved;
        event EventHandler<CharacterDownloadedEventArgs> CharacterDownloaded;
        bool IsMember(string name);
        Raider FindRaider(string characterName);
        void DownloadCharacterAsynch(WowRegion region, string realm, string name);
        void SubscribeEvents();
        void UnsubscribeEvents();
    }
}